package cn.lxb.web.starter.template.controller;

import cn.lxb.web.starter.template.domain.dto.ConvertDTO;
import cn.lxb.web.starter.template.service.BaseService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 控制器接口
 *
 * @param <E>  实体对象类型
 * @param <S>  服务接口类型
 * @param <PK> 实体主键类型
 * @author 54lxb
 * @since 2019-11-20
 */
public interface DeleteController<D, E extends ConvertDTO<D>, S extends BaseService<E, PK>, PK> extends BaseController<E, S> {

    /**
     * 根据主键ID删除对象
     *
     * @param id 主键ID
     */
    @ApiOperation("删除")
    @DeleteMapping("/{id}")
    default void deleteById(@ApiParam(value = "id", required = true) @PathVariable PK id) {
        getService().selectById(id);
        getService().deleteById(id);
    }

    /**
     * 删除前置环绕
     *
     * @param dto    dto对象
     * @param entity 实体对象
     */
    void deleteBefore(D dto, E entity);

}
